home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
t_os
/
magl
/
wild.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-10-18
|
2KB
|
82 lines
/* Wild Card Library */
#include <msdos.cf>
#include "wild.h"
DTA *search(char *path,int mode,char *fname);
DTA *next(char *path,int mode,char *fname);
char *getext(char *arg);
char *getname(char *arg);
/* Gloval vari. */
static DTA dta;
DTA *search(char *path,int mode,char *fname)
{
char *s,*d;
Registers.AX.R = 0x1A00; /* DTAアドレスの変更 */
Registers.DX.R = (int)&dta;
Registers.DS.R = getds();
calldos();
Registers.AX.R = 0x4E00; /* 最初に一致するファイル名の検索 */
Registers.CX.R = mode;
Registers.DX.R = (int)path;
Registers.DS.R = getds();
calldos();
if ((Registers.Flags&0x0001)!=0) {
*fname = '\0';
return NULL;
}
for(s=path,d=fname;*s!='\0';*d++=*s++);
*d = '\0';
for(s=dta.fname,d=getname(fname);*s!='\0';*d++=*s++);
*d = '\0';
return &dta;
}
DTA *next(char *path,int mode,char *fname)
{
char *s,*d;
Registers.AX.R = 0x4F00; /* 次に一致するファイル名の検索 */
calldos();
if ((Registers.Flags&0x0001)!=0) {
*fname = '\0';
return NULL;
}
for(s=path,d=fname;*s!='\0';*d++=*s++);
*d = '\0';
for(s=dta.fname,d=getname(fname);*s!='\0';*d++=*s++);
*d = '\0';
return &dta;
}
char *getext(char *arg)
{
char *p;
for(p=arg;*arg!='\0';arg++)
if (*arg=='\\') p=arg+1;
for(;*p!='.'&&*p!='\0';p++);
if (*p=='\0')
return NULL;
else
return p+1;
}
char *getname(char *arg)
{
char *p;
for(p=arg;*arg!='\0';arg++)
if (*arg=='\\'||*arg==':') p=arg+1;
return p ;
}